﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Text.RegularExpressions;

namespace CityGames
{
    public partial class FormAlquilerVenta : Form
    {
        //private string expRetbDni = @"^(([A-Z]\d{8})|(\d{8}[A-Z]))$";
        private string expRetbDni = @"^(([A-Z]?\d{0,8})|(\d{0,8}[A-Z]?))$";
        private string expRetbNombre = @"^([áéíóú]|[a-z]|[A-Z]| )*$";

        static private FormContenedor contenedor;
        private const int numeroDeSociosPorPagina = 14;
        private int numeroDePaginaActual;
        private int numeroDePaginasMaximo;
        static private Socio socio = new Socio();
        public DataSet dsSocios;

        private bool ok = true;
        private string error = "Los siguientes campos estan mal escritos:\n";

        public FormAlquilerVenta()
        {
            InitializeComponent();
        }

        private bool ValidarCampos()
        {
            try
            {
                ok = true;
                error = "Los siguientes campos estan mal escritos:\n";

                if (!Regex.Match(tbNombre.Text, expRetbNombre).Success)
                {
                    ok = false;
                    error += "-Nombre\n";   //Nombre introducido incorrectamente
                }

                if (!Regex.Match(tbApellidos.Text, expRetbNombre).Success)
                {
                    ok = false;
                    error += "-Apellidos\n";   //Nombre introducido incorrectamente
                }

                if (!Regex.Match(tbDNI.Text, expRetbDni).Success)
                {
                    ok = false;
                    error += "-DNI\n";      //DNI introducido incorrectamente
                }

                if(!ok)
                    MessageBox.Show(error, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (Exception ex)
            {
                ok = false;
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            return (ok);
        }

        public void MostrarTodos()
        {
            try
            {
                tbDNI.Text = "";
                tbDNI.Focus();
                tbNombre.Text = "";
                tbApellidos.Text = "";

                numeroDePaginaActual = 1;

                CargarDataGridViewSocios();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btMostrarTodos_Click(object sender, EventArgs e)
        {
            MostrarTodos();
        }


        private void btFiltrar_Click(object sender, EventArgs e)
        {
            try
            {
                if (ValidarCampos())
                {
                    numeroDePaginaActual = 1;
                    CargarDataGridViewSocios();   
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btSiguiente_Click(object sender, EventArgs e)
        {
            double deuda;

            try
            {
                if (dgSocios.SelectedRows.Count == 1)
                {
                    deuda = double.Parse(socio.ObtenerDeuda(dgSocios.SelectedRows[0].Cells["DNI"].Value.ToString()).ToString());
                    if (deuda > 0)
                    {
                        /*contenedor.hijoFormAlquilerVenta2.Iniciar(dgSocios.SelectedRows[0].Cells["DNI"].Value.ToString());
                        contenedor.hijoFormAlquilerVenta2.ShowDialog();*/
                        DialogResult result = MessageBox.Show("El usuario tiene una deuda de " + deuda.ToString() + " €. \n ¿Cobrar ahora?", "Deudas pendientes", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);

                        if (result == DialogResult.Yes)
                        {
                            socio.DeudaACero(dgSocios.SelectedRows[0].Cells["DNI"].Value.ToString());
                            contenedor.hijoFormAlquilerVenta3.Iniciar(dgSocios.SelectedRows[0].Cells["DNI"].Value.ToString());
                            contenedor.hijoFormAlquilerVenta3.Focus();
                        }
                        else if (result == DialogResult.No)
                        {
                            contenedor.hijoFormAlquilerVenta3.Iniciar(dgSocios.SelectedRows[0].Cells["DNI"].Value.ToString());
                            contenedor.hijoFormAlquilerVenta3.Focus();
                        }

                    }
                    else
                    {
                        contenedor.hijoFormAlquilerVenta3.Iniciar(dgSocios.SelectedRows[0].Cells["DNI"].Value.ToString());
                        contenedor.hijoFormAlquilerVenta3.Focus();
                    }
                }
                else
                {
                    MessageBox.Show("Debe seleccionar un socio.    ", "Seleccione un socio.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han producido los siguientes errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void FormAlquilerVenta_Load(object sender, EventArgs e)
        {
            try
            {
                contenedor = (FormContenedor)MdiParent;

                numeroDePaginaActual = 1;

                CargarDataGridViewSocios();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han producido los siguientes errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void CargarDataGridViewSocios()
        {
            try
            {

                numeroDePaginasMaximo = int.Parse(Math.Ceiling(double.Parse(socio.ObtenerNumeroDeSociosFiltrados(tbNombre.Text, tbApellidos.Text, tbDNI.Text, "").ToString()) / numeroDeSociosPorPagina).ToString());
                if (numeroDePaginaActual > numeroDePaginasMaximo)
                    numeroDePaginaActual = numeroDePaginasMaximo;

                dsSocios = socio.FiltrarSocios(tbNombre.Text, tbApellidos.Text, tbDNI.Text, "", numeroDeSociosPorPagina * (numeroDePaginaActual - 1), numeroDePaginaActual * numeroDeSociosPorPagina);
                dgSocios.DataSource = dsSocios;
                dgSocios.DataMember = "SociosFiltrados";
                lblPaginaDGV.Text = "Página " + numeroDePaginaActual.ToString() + " de " + numeroDePaginasMaximo.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        

        private void bDGVUltimaPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = numeroDePaginasMaximo;
                CargarDataGridViewSocios();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPaginaSiguiente_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual < numeroDePaginasMaximo)
                {
                    numeroDePaginaActual++;
                    CargarDataGridViewSocios();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPaginaAnterior_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual > 1)
                {
                    numeroDePaginaActual--;
                    CargarDataGridViewSocios();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPrimeraPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewSocios();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
